Elasticsearch是Elastic Stack的核心分布式搜索和分析引擎。 Elastic Stack技术栈中，Logstash和Beats用于收集、聚合和丰富数据，并将数据存储在Elasticsearch中。 Kibana可以帮助用户进行交互式地探索，可视化和共享对数据的见解，并管理和监视整个Stack的运行情况。而Elasticsearch便是为数据建立索引，提供搜索和进行数据分析的地方。

Elasticsearch可以为所有类型的数据提供实时的搜索和分析，包括结构化文本、非结构化文本、数字数据或地理空间数据。Elasticsearch都能够以快速搜索的方式有效地对其进行存储和建立索引（search其实就是对索引的快速查找）。 ElasticSearch不仅可以进行简单的数据检索，还可以聚合信息来发现数据中的趋势和模式。 随着数据和查询量的增长，Elasticsearch的分布式特性可以使部署的集群随之无缝地扩容。

Elasticsearch旨在提供高可用，和可扩展的系统功能，并通过自身具有的分布式存储结构来实现系统的弹性和可扩展性。用户可以将服务器（物理主机节点）添加到集群以增加计算和存储容量，此时Elasticsearch会自动在所有可用节点之间分配数据和均衡查询负载。很大程度的减少了用户对应用程序的修改，Elasticsearch知道如何平衡多节点集群以提供扩展性和高可用性。节点越多，系统的可用性和负载均衡的能力越好。

那么上面的可扩展性和弹性是如何运作的呢？在ES底层，Elasticsearch索引（index）实际上是一个或多个物理分片（shards）的逻辑分组，其中每个分片都是一个独立的索引。通过将文档分布在多个分片组成的一个逻辑索引，然后将这些分片分布在多个节点中，Elasticsearch实现了数据的冗余存储。这既可以防止硬件故障，又可以在将节点添加到集群中时提高查询能力。随着集群的增长（或收缩），Elasticsearch会自动迁移碎片以重新平衡集群。

上述的分片有两种类型：主分片和副本。索引中的每个文档都只属于一个主分片。副本分片是主分片的副本。副本可提供数据的冗余副本，以防止硬件故障并提高处理读取请求（例如搜索或检索文档）的能力。
